# coding = utf-8
'''
工具集
'''
import requests
import re
import datetime

from conf import const
from data.stations import station_names,station_codes

from prettytable import PrettyTable
from colorama import Fore


def request_kyfw_url(from_station_code,to_station_code,start_date):
    '''
    请求火车票查询系统
    '''
    try:
        url = const.TICKET_REQUEST_URL.format(start_date,from_station_code,to_station_code)
        r = requests.get(url,verify = False)
        if r.status_code == 200:
            if 'data' not in r.json().keys():
                raise KeyError('选择的查询日期不在预售日期范围内')
            resp = r.json()['data']['result']
            return resp
    except RuntimeError:
        raise RuntimeError('选择的查询日期不在预售日期范围内')


def generate_station_name_pairs():
    '''
    生成车站名称和code码
    执行命令:python util.py >>stations.py
    '''
    r = requests.get(const.STATION_CODE_NAME_URL,verify=False)
    #正则表达式进行匹配
    pattern = u'([\u4e00-\u9fa5]+)\|([A-Z]+)'
    #取出信息list
    result = re.findall(pattern,r.text)
    #转为dict
    station_dict = dict(result)
    print(station_dict.keys())
    print(station_dict.values())


def get_station_name(station_code):
    '''
    根据车站的code码返回车站的名称
    '''
    return station_names[station_codes.index(station_code)]

def get_station_code(station_name):
    '''
    根据车站的名称返回车站的code码
    '''
    return station_codes[station_names.index(station_name)]

def check_station_name(from_station_name):
    '''
    检查车站的名称是否在字典信息中存在
    '''
    if from_station_name not in station_names:
        raise RuntimeError('请输出正确的车站名称')
    
def check_start_date(start_date):
    '''
    校验时间格式是否正确
    '''
    try:
        datetime.datetime.strptime(start_date,'%Y-%m-%d')
    except ValueError:
        raise ValueError('时间格式错误,应该是这种格式(2018-07-01)')

def format_duration(duration_time):
    '''
    格式化历时(15:40-->15时40分)
    '''
    fd = duration_time.replace(':', u'时') + u'分'
    if fd.startswith('00'):
        return fd[3:]
    return fd

def pretty_print(raw_trains_list):
    '''
    优雅的输出
    '''
    pt = PrettyTable()
    pt._set_field_names('车次 车站 时间 历时 一等座 二等座 软卧 硬卧 硬座 无座'.split())
    for raw in raw_trains_list:
        pt.add_row(raw)
    print(pt)

def set_color(str1,str2):
    '''
    将数据进行着色
    '''
    return '\n'.join([Fore.GREEN+str1+Fore.RESET,Fore.RED+str2+Fore.RESET])








